package com.offcn.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtil {
    // 有效时间
    public static final Long JWT_EXP = 1000 * 60 * 60L; // 1个小时
    // 签名
    private static final String JWT_KEY = "ujiuye";

    // 生成jwt
    public static String createJwt(String id, String userInfo, Long exp){
        // 设定算法
        SignatureAlgorithm alg = SignatureAlgorithm.HS256;
        if (exp == null){  // 如果没有exp，则使用 1个小时的过期时间
            exp = JWT_EXP;
        }
        JwtBuilder builder = Jwts.builder()
                .setId(id) // 设置唯一标识
                .setIssuer("admin") // 签发人
                .setSubject(userInfo) // 面向对象
                .setIssuedAt(new Date()) // 签发时间
                .setExpiration(new Date(System.currentTimeMillis() + exp)) // 到期时间
                .signWith(alg, JWT_KEY); // 进行加密(秘钥是不能暴露的)
        return builder.compact();
    }

   // 解析jwt:如果jwt 过期或被篡改之后就会抛异常
    public static Claims parseJwt(String jwt) throws Exception{
        Claims claims = Jwts.parser().setSigningKey(JWT_KEY).parseClaimsJws(jwt).getBody();
        return claims;
    }
}
